#include "funciones.h"

const void * ReservaVector(int nEle, int opcion)
{
switch(opcion)
{	
	case 1: return (int *)malloc(nEle*sizeof(int));
		break;
	
	case 2: return (long *)malloc(nEle*sizeof(long));
		break;

	case 3: return (double *)malloc(nEle*sizeof(double));
		break;

	case 4: return (float*)malloc(nEle*sizeof(float));
		break;

	default: exit(-1);
}

}

const void* RellenaVector(int nEle,int opcion, const void *p)
{
int i;

	switch(opcion){


			case 1:{ 
				int * enteros = (int*)p;
				for(i=0;i<nEle;i++)
				{
					printf("Introduce el elemento %d: ", i);
					scanf("%d", &enteros[i]);
				}
					printf("\n");
				return enteros;
				break;}

			case 2:{
				long * longes = (long *)p;
				for(i=0;i<nEle;i++)
				{

					printf("Introduce el elemento %d: ", i);
					scanf("%li", &longes[i]); 
				}
				
				printf("\n");
				return longes;
				break;}

			case 3:{
				double * dobles= (double*)p;
				for(i=0;i<nEle;i++)
				{

					printf("Introduce el elemento %d: ", i);
					scanf("%lf", &dobles[i]);
				}
				
				printf("\n");
				return dobles;
				break;}

			case 4:{
				float * flotantes = (float*)p;
				for(i=0;i<nEle;i++)
				{

					printf("Introduce el elemento %d: ", i);
					scanf("%f", &flotantes[i]);

				}
				printf("\n");
				return flotantes;
				break;}
	}

}

void ImprimeVector(int nEle, int opcion, const void * p)
{
int i;

	switch(opcion){


			case 1:{
				int * enteros = (int*)p;
				for(i=0;i<nEle;i++)
				{
					printf("Elemento %d: %d\n", i, enteros[i]);
				}
					printf("\n");
				break;}

			case 2:{
				long* longes = (long*)p;
				for(i=0;i<nEle;i++)
				{

					printf("Elemento %d: %li\n", i, longes[i]);
				}
				
				printf("\n");
				break;}

			case 3:{
				double * dobles = (double*)p;
				for(i=0;i<nEle;i++)
				{

					printf("Elemento %d: %lf\n", i, dobles[i]);
				}
				
				printf("\n");
				break;}

			case 4:{
				float * flotantes= (float*)p;
				for(i=0;i<nEle;i++)
				{

					printf("Elemento %d: %.3f\n", i, flotantes[i]);

				}
				printf("\n");
				break;}
	}
}

void MayorElemento(int nEle, int opcion, const void* p)
{
int i;

	switch (opcion){

			case 1:{
					int * enteros = (int *)p;
					int mayor= enteros[0];
					
						for(i=1;i<=nEle;i++)
						{

							if(mayor<enteros[i])
								mayor = enteros[i];
		
						
						}
					printf("\nMayor: %d\n", mayor);

					break;
				}
			case 2:{ 

					long* longes = (long*) p;
					long mayor = longes[0];
						
						for(i=1;i<=nEle;i++)
						{

							if(mayor<longes[i])
								mayor = longes[i];

						}
					printf("\nMayor: %li\n", mayor);
				break;}
			case 3:{ 

					double * dobles = (double*)dobles;
					double mayor = dobles[0];

						for(i=1;i<=nEle;i++)
						{
	
							if(mayor<dobles[i])
								mayor = dobles[i];

						}
					printf("\nMayor: %.4lf\n", mayor);
				break;}
			case 4:{


					float * flotantes = (float*)p;
					float mayor = flotantes[0];
				

						for(i=1;i<=nEle; i++)
						{

							if(mayor<flotantes[i])
								mayor = flotantes[i];

						}

					printf("\nMayor: %.3f\n", mayor);
				break;}
	}

}
